package com.gdev.androfuel;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import android.content.Context;
import android.database.Cursor;
import android.util.Log;

@SuppressWarnings("serial")
public class PleinBean implements Serializable {

	/** Id du Plein. */
	private long idPlein;

	/** Date du plein. */
	private Date datePlein;

	/** Km total */
	private double kmTotal = 0.0;

	/** Km parcouru. */
	private double kmParcouru = 0.0;

	/** Km restant. */
	private double kmRestant = 0.0;

	/** Prix du plein . */
	private double prixEssence = 0.0;

	/** taille du plein. */
	private double qtePlein = 0.0;

	/** Prix du plein. */
	private double prixPlein = 0.0;

	/** Conso. */
	private double conso = 0.0;

	/** Conso estime. */
	private double consoEstime = 0.0;

	/** Autonomie. */
	private double autonomie = 0.0;

	/** Autonomie estimée. */
	private double autonomieEstime = 0.0;

	/** Commentaire. */
	private String commentaire = "";
	
	/** idStation */
	private long idStation = 0;
	
	/**
	 * Constructeur.
	 * @param idPlein
	 * @param datePlein
	 * @param kmTotal
	 * @param kmParcouru
	 * @param kmRestant
	 * @param prixEssence
	 * @param qtePlein
	 * @param prixPlein
	 * @param conso
	 * @param consoEstime
	 * @param autonomie
	 * @param autonomieEstime
	 * @param commentaire
	 */
	public PleinBean(long idPlein, Date datePlein, double kmTotal,
			double kmParcouru, double kmRestant, double prixEssence,
			double qtePlein, double prixPlein, double conso,
			double consoEstime, double autonomie, double autonomieEstime,
			String commentaire, int idStation) {
		super();
		this.idPlein = idPlein;
		this.datePlein = datePlein;
		this.kmTotal = kmTotal;
		this.kmParcouru = kmParcouru;
		this.kmRestant = kmRestant;
		this.prixEssence = prixEssence;
		this.qtePlein = qtePlein;
		this.prixPlein = prixPlein;
		this.conso = conso;
		this.consoEstime = consoEstime;
		this.autonomie = autonomie;
		this.autonomieEstime = autonomieEstime;
		this.commentaire = commentaire;
		this.idStation = idStation;
	}

	/**
	 * Constructeur pour affichage dans liste.
	 * @param idPlein2
	 * @param maDate
	 */
	public PleinBean(long idPlein2, Date maDate) {
		this.idPlein = idPlein2;
		this.datePlein = maDate;
	}
	
	public PleinBean() {
	}
	
	/**
	 * Constructeur pour creation nouveau plein.
	 * @param maDate
	 */
	public PleinBean(Date maDate) {
		this.datePlein = maDate;
	}
	
	public PleinBean(Context ctx, PleinsDbAdapter mDbHelper, long idPlein) {
		this.idPlein = idPlein;
		Cursor plein = mDbHelper.fetchPlein(idPlein);
		Calendar monCalendrier = Calendar.getInstance();
		monCalendrier.setTimeInMillis(plein.getLong(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_DATEPLEIN)));
		Date maDate = (Date) monCalendrier.getTime();
		
		this.datePlein = maDate;
		this.kmTotal = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_KMTOTAL));
		this.kmParcouru = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_KMPARCOURU));
		this.kmRestant = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_KMRESTANT));
		this.prixEssence = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_PRIXESSENCE));
		this.qtePlein = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_QUANTITEPLEIN));
		this.prixPlein = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_PRIXPLEIN));
		this.conso = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_CONSO));
		this.consoEstime = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_CONSOESTIMEE));
		this.autonomie = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_AUTONOMIE));
		this.autonomieEstime = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_AUTONOMIEESTIMEE));
		this.commentaire = plein.getString(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_COMMENTAIRE));
		this.idStation = plein.getInt(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_STATION));
	}
 	
	/**
	 * Sauvegarde en base 
	 */
	public boolean savePlein(Context ctx, PleinsDbAdapter mDbHelper) {
		boolean testSauvegarde = true;
		Log.d("GCarburant", "Debut save plein : " + this.idPlein);
		if(this.idPlein == 0) {
			Log.d("GCarburant", "Save donne create : " + this.idPlein);
			this.idPlein = mDbHelper.createPlein(this.datePlein.getTime(), this.kmTotal, 
					this.kmParcouru, this.kmRestant, this.prixEssence, 
					this.qtePlein, this.prixPlein, this.conso,
					this.consoEstime, this.autonomie, this.autonomieEstime, 
					this.commentaire, this.idStation);
			if(this.idPlein == -1) { testSauvegarde = false; }
		} else {
			Log.d("GCarburant", "Save donne update : " + this.idPlein);
			testSauvegarde = mDbHelper.updatePlein(this.idPlein, this.datePlein.getTime(), this.kmTotal, 
					this.kmParcouru, this.kmRestant, this.prixEssence, 
					this.qtePlein, this.prixPlein, this.conso,
					this.consoEstime, this.autonomie, this.autonomieEstime, 
					this.commentaire, this.idStation);
		}
		return testSauvegarde;
	}
	
	public void loadPlein(Context ctx, PleinsDbAdapter mDbHelper) {
		Cursor plein = mDbHelper.fetchPlein(this.idPlein);
		this.kmTotal = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_KMTOTAL));
		this.kmParcouru = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_KMPARCOURU));
		this.kmRestant = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_KMRESTANT));
		this.prixEssence = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_PRIXESSENCE));
		this.qtePlein = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_QUANTITEPLEIN));
		this.prixPlein = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_PRIXPLEIN));
		this.conso = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_CONSO));
		this.consoEstime = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_CONSOESTIMEE));
		this.autonomie = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_AUTONOMIE));
		this.autonomieEstime = plein.getDouble(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_AUTONOMIEESTIMEE));
		this.commentaire = plein.getString(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_COMMENTAIRE));
		this.idStation = plein.getInt(plein.getColumnIndexOrThrow(PleinsDbAdapter.KEY_STATION));
	}
	
	/**
	 * Methode pour l'affichage dans la listView.
	 */
	public String toString() {
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		return "Plein du " + sdf.format(datePlein);
	}

	/**
	 * Methode pour l'affichage dans la listView.
	 */
	public String toExport() {
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		return "2;" + this.idPlein + ";" + 
			sdf.format(this.datePlein) + ";" + 
			this.kmTotal + ";" + 
			this.kmParcouru + ";" + 
			this.kmRestant + ";" + 
			this.prixEssence + ";" + 
			this.qtePlein + ";" + 
			this.prixPlein + ";" + 
			this.conso + ";" + 
			this.consoEstime + ";" + 
			this.autonomie + ";" + 
			this.autonomieEstime + ";" + 
			this.commentaire + ";" +
			this.idStation + ";";
	}
	
	/**
	 * Get the idPlein.
	 * 
	 * @return the idPlein
	 */
	public long getIdPlein() {
		return idPlein;
	}

	/**
	 * Set the idPlein.
	 * 
	 * @param idPlein
	 *            the idPlein to set
	 */
	public void setIdPlein(int idPlein) {
		this.idPlein = idPlein;
	}

	/**
	 * Get the datePlein.
	 * 
	 * @return the datePlein
	 */
	public Date getDatePlein() {
		return datePlein;
	}

	/**
	 * Set the datePlein.
	 * 
	 * @param datePlein
	 *            the datePlein to set
	 */
	public void setDatePlein(Date datePlein) {
		this.datePlein = datePlein;
	}

	/**
	 * Get the kmTotal.
	 * 
	 * @return the kmTotal
	 */
	public double getKmTotal() {
		return kmTotal;
	}

	/**
	 * Set the kmTotal.
	 * 
	 * @param kmTotal
	 *            the kmTotal to set
	 */
	public void setKmTotal(double kmTotal) {
		this.kmTotal = kmTotal;
	}

	/**
	 * Get the kmParcouru.
	 * 
	 * @return the kmParcouru
	 */
	public double getKmParcouru() {
		return kmParcouru;
	}

	/**
	 * Set the kmParcouru.
	 * 
	 * @param kmParcouru
	 *            the kmParcouru to set
	 */
	public void setKmParcouru(double kmParcouru) {
		this.kmParcouru = kmParcouru;
	}

	/**
	 * Get the kmRestant.
	 * 
	 * @return the kmRestant
	 */
	public double getKmRestant() {
		return kmRestant;
	}

	/**
	 * Set the kmRestant.
	 * 
	 * @param kmRestant
	 *            the kmRestant to set
	 */
	public void setKmRestant(double kmRestant) {
		this.kmRestant = kmRestant;
	}

	/**
	 * Get the prixEssence.
	 * 
	 * @return the prixEssence
	 */
	public double getPrixEssence() {
		return prixEssence;
	}

	/**
	 * Set the prixEssence.
	 * 
	 * @param prixEssence
	 *            the prixEssence to set
	 */
	public void setPrixEssence(double prixEssence) {
		this.prixEssence = prixEssence;
	}

	/**
	 * Get the qtePlein.
	 * 
	 * @return the qtePlein
	 */
	public double getQtePlein() {
		return qtePlein;
	}

	/**
	 * Set the qtePlein.
	 * 
	 * @param qtePlein
	 *            the qtePlein to set
	 */
	public void setQtePlein(double qtePlein) {
		this.qtePlein = qtePlein;
	}

	/**
	 * Get the prixPlein.
	 * 
	 * @return the prixPlein
	 */
	public double getPrixPlein() {
		return prixPlein;
	}

	/**
	 * Set the prixPlein.
	 * 
	 * @param prixPlein
	 *            the prixPlein to set
	 */
	public void setPrixPlein(double prixPlein) {
		this.prixPlein = prixPlein;
	}

	/**
	 * Get the conso.
	 * 
	 * @return the conso
	 */
	public double getConso() {
		return conso;
	}

	/**
	 * Set the conso.
	 * 
	 * @param conso
	 *            the conso to set
	 */
	public void setConso(double conso) {
		this.conso = conso;
	}

	/**
	 * Get the consoEstime.
	 * 
	 * @return the consoEstime
	 */
	public double getConsoEstime() {
		return consoEstime;
	}

	/**
	 * Set the consoEstime.
	 * 
	 * @param consoEstime
	 *            the consoEstime to set
	 */
	public void setConsoEstime(double consoEstime) {
		this.consoEstime = consoEstime;
	}

	/**
	 * Get the autonomie.
	 * 
	 * @return the autonomie
	 */
	public double getAutonomie() {
		return autonomie;
	}

	/**
	 * Set the autonomie.
	 * 
	 * @param autonomie
	 *            the autonomie to set
	 */
	public void setAutonomie(double autonomie) {
		this.autonomie = autonomie;
	}

	/**
	 * Get the autonomieEstime.
	 * 
	 * @return the autonomieEstime
	 */
	public double getAutonomieEstime() {
		return autonomieEstime;
	}

	/**
	 * Set the autonomieEstime.
	 * 
	 * @param autonomieEstime
	 *            the autonomieEstime to set
	 */
	public void setAutonomieEstime(double autonomieEstime) {
		this.autonomieEstime = autonomieEstime;
	}

	/**
	 * Get the commentaire.
	 * 
	 * @return the commentaire
	 */
	public String getCommentaire() {
		return commentaire;
	}

	/**
	 * Set the commentaire.
	 * 
	 * @param commentaire
	 *            the commentaire to set
	 */
	public void setCommentaire(String commentaire) {
		this.commentaire = commentaire;
	}

	/**
	 * Get the station.
	 * 
	 * @return the station
	 */
	public long getIdStation() {
		return idStation;
	}

	/**
	 * Set the idStation.
	 * 
	 * @param idStation
	 *            the idStation to set
	 */
	public void setIdStation(long idStation) {
		this.idStation = idStation;
	}

}
